package com.gpjcjl.http;

import com.gpjcjl.entity.InitInfo;
import com.gpjcjl.entity.Record;
import com.gpjcjl.entity.RecordDetail;
import com.gpjcjl.entity.Result;

import java.util.List;
import java.util.Map;

import io.reactivex.Completable;
import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

/**
 * @author yinbiao
 * @date 2019/3/18
 */
public interface HttpService {

    /**
     * 获取初始化信息
     *
     * @return Result
     */
    @GET("api/common/init")
    Observable<Result<InitInfo>> init(@Query("device_id") String device_id);


    /**
     * 新增产权单位
     *
     * @param device_id 设备唯一编号
     * @param property  产权单位名称
     * @return
     */
    @POST("api/check/editProperty")
    @FormUrlEncoded
    Observable<Result<String>> editProperty(
            @Query("device_id") String device_id,
            @Field("property") String property,
            @Field("id") String id);

    /**
     * 编辑生产单位
     *
     * @param device_id 设备唯一编号
     * @param produce   生产单位名称
     * @param id        生产单位id
     * @return
     */
    @POST("api/check/editProduce")
    @FormUrlEncoded
    Observable<Result<String>> editProduce(
            @Query("device_id") String device_id,
            @Field("produce") String produce,
            @Field("produce_num") String produceNum,
            @Field("id") String id);

    /**
     * 上传离线数据
     *
     * @param device_id     设备唯一编号
     * @param record        原始记录
     * @param recordDetails 原始记录详情
     * @return
     */
    @POST("api/check/syncRecord")
    @FormUrlEncoded
    Observable<Result<String>> syncRecord(
            @Query("device_id") String device_id,
            @Field("record") String record,
            @Field("record_detail") String recordDetails);

    /**
     * 获取已上传的原始记录列表
     *
     * @param device_id 设备唯一编号
     * @param page      页码从1开始
     * @param page_size 每页条数
     * @return
     */
    @POST("api/check/getRecordList")
    Observable<Result<List<Record>>> getRecordList(
            @Query("device_id") String device_id,
            @Query("page") int page,
            @Query("page_size") int page_size);

    /**
     * 修改原始记录
     *
     * @param device_id 设备唯一编号
     * @return
     */
    @POST("api/check/editRecord")
    @FormUrlEncoded
    Observable<Result<Record>> editRecord(
            @Query("device_id") String device_id,
            @FieldMap Map<String, String> map);

    /**
     * 删除原始记录
     *
     * @param device_id 设备唯一编号
     * @param rid       原始记录i
     * @return
     */
    @POST("api/check/delRecord")

    @FormUrlEncoded
    Observable<Result<String>> delRecord(
            @Query("device_id") String device_id,
            @Field("rid") String rid);

    /**
     * 查询原始记录下的钢瓶列表
     *
     * @param device_id 设备唯一编号
     * @param rid       原始记录i
     * @return
     */
    @POST("api/check/recordDetailList")
    @FormUrlEncoded
    Observable<Result<List<RecordDetail>>> recordDetailList(
            @Query("device_id") String device_id,
            @Field("rid") String rid);

    /**
     * 修改原始记录详情
     *
     * @param device_id 设备唯一编号
     * @param map       参数集合
     * @return
     */
    @POST("api/check/editRecordDetail")
    @FormUrlEncoded
    Observable<Result<String>> editRecordDetail(
            @Query("device_id") String device_id,
            @FieldMap Map<String, String> map);


    /**
     * 删除原始记录下的钢瓶记录
     *
     * @param device_id 设备唯一编号
     * @param rid       原始记录id
     * @param id        原始记录钢瓶id
     * @return
     */
    @POST("api/check/delRecordDetail")
    @FormUrlEncoded
    Observable<Result<String>> delRecordDetail(
            @Query("device_id") String device_id,
            @Field("rid") String rid,
            @Field("id") String id);

    /**
     * 根据关键字搜索钢瓶列表
     *
     * @param device_id 设备唯一编号
     * @param rid       原始记录i
     * @param search_id 关键字
     * @return
     */
    @POST("api/check/searchRecordDetail")
    @FormUrlEncoded
    Observable<Result<List<RecordDetail>>> searchRecordDetail(
            @Query("device_id") String device_id,
            @Field("rid") String rid,
            @Field("search_id") String search_id);

    /**
     * 根据二维码查询钢瓶信息
     *
     * @param device_id
     * @param url
     * @return
     */
    @POST("api/check/getQCode")
    @FormUrlEncoded
    Observable<Result<RecordDetail>> getQCode(
            @Query("device_id") String device_id,
            @Field("url") String url);


}
